/**
在JavaScript中创建函数的不同方法(3种)，
  创建和调用函数的方式将影响其函数体将指向的执行上下文(execution context):
1 函数声明
*/
function sub(a, b) {
  return a - b
}
console.log(sub(1, 2));   //-1
/*
2 函数表达式
*/
var add = function(a, b) {
  return a + b;
}
console.log(add(1, 2));   //3

/*
3 new Function()创建但是，由于其性能差以及可读性差，
  不建议这样做。
  格式
  new Function ([arg1, arg2, ...argN], functionBody)
 */
//传入参数
let sum = new Function('a', 'b', 'return a + b');
console.log(sum(1, 2)); // 3

//不传入参数
let fun = new Function('console.log(1)');
console.log(fun());    // 1